In [1]:
import numpy as np
import pandas as pd
import scipy
from statsmodels.stats.weightstats import *
In [2]:
%pylab inline
В рамках исследования эффективности препарата метилфенидат 24 пациента с синдромом дефицита внимания и гиперактивности в течение недели принимали либо метилфенидат, либо плацебо. В конце недели каждый пациент проходили тест на способность к подавлению импульсивных поведенческих реакций. На втором этапе плацебо и препарат менялись, и после недельного курса каждый испытуемые проходили второй тест.
Требуется оценить эффект применения препарата.
Pearson D.A, Santos C.W., Casat C.D., et al. (2004). Treatment effects of methylphenidate on cognitive functioning in children with mental retardation and ADHD. Journal of the American Academy of Child and Adolescent Psychiatry, 43(6), 677–685.
In [3]:
data = pd.read_csv('ADHD.txt', sep = ' ', header = 0)
data.columns = ['Placebo', 'Methylphenidate']
In [4]:
data.plot.scatter('Placebo', 'Methylphenidate', c = 'r', s = 30)
pylab.grid()
pylab.plot(range(100), c = 'black')
pylab.xlim((20, 80))
pylab.ylim((20, 80))
pylab.show()
In [5]:
data.plot.hist()
pylab.show()
Исходя из того, что способность к подавлению испульсивных поведенческих реакций измеряется по шкале [0, 100], можно предположить, что при хорошей калибровке теста средняя способоность к подавлению реакций в популяции составляет 50. Тогда для того, чтобы проверить гипотезу о том, что пациенты в выборке действительно в среднем хуже справляются с подавлением импульсивных реакций (нуждаются в лечении), давайте проверим, что их способность к подавлению реакций отличается от средней (не равна 50).
$H_0\colon$ среднее значение способности к подавлению испульсивных поведенческих реакций равно 50.
$H_1\colon$ не равно.
In [6]:
stats.ttest_1samp(data.Placebo, 50.0)
Out[6]:
In [7]:
print "95%% confidence interval: [%f, %f]" % zconfint(data.Placebo)
Для того, чтобы использовать двухвыборочный критерий Стьюдента, убедимся, что распределения в выборках существенно не отличаются от нормальных.
In [8]:
pylab.figure(figsize=(12,8))
pylab.subplot(2,2,1)
stats.probplot(data.Placebo, dist="norm", plot=pylab)
pylab.subplot(2,2,2)
stats.probplot(data.Methylphenidate, dist="norm", plot=pylab)
pylab.show()
Критерий Шапиро-Уилка:
$H_0\colon$ способности к подавлению импульсивных реакций распредлены нормально
$H_1\colon$ не нормально.
In [9]:
print "Shapiro-Wilk normality test, W-statistic: %f, p-value: %f" % stats.shapiro(data.Placebo)
In [10]:
print "Shapiro-Wilk normality test, W-statistic: %f, p-value: %f" % stats.shapiro(data.Methylphenidate)
С помощью критерия Стьюдента проверим гипотезу о развенстве средних двух выборок.
Критерий Стьюдента:
$H_0\colon$ средние значения способности к подавлению испульсивных поведенческих реакций одинаковы для пациентов, принимавших препарат, и для пациентов, принимавших плацебо.
$H_0\colon$ не одинаковы.
In [11]:
scipy.stats.ttest_ind(data.Placebo, data.Methylphenidate, equal_var = False)
Out[11]:
In [14]:
cm = CompareMeans(DescrStatsW(data.Methylphenidate), DescrStatsW(data.Placebo))
print "95%% confidence interval: [%f, %f]" % cm.tconfint_diff(usevar='unequal')
Для того, чтобы использовать критерй Стьюдента для связанных выборок, давайте проверим, что распределение попарных разностей существенно не отличается от нормального.
In [13]:
stats.probplot(data.Placebo - data.Methylphenidate, dist = "norm", plot = pylab)
pylab.show()
Критерий Шапиро-Уилка:
$H_0\colon$ попарные разности распределены нормально.
$H_1\colon$ не нормально.
In [14]:
print "Shapiro-Wilk normality test, W-statistic: %f, p-value: %f" % stats.shapiro(data.Methylphenidate - data.Placebo)
Критерий Стьюдента:
$H_0\colon$ средние значения способности к подавлению испульсивных поведенческих реакций одинаковы для пациентов, принимавших препарат, и для пациентов, принимавших плацебо.
$H_1\colon$ не одинаковы.
In [15]:
stats.ttest_rel(data.Methylphenidate, data.Placebo)
Out[15]:
In [16]:
print "95%% confidence interval: [%f, %f]" % DescrStatsW(data.Methylphenidate - data.Placebo).tconfint_mean()